home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / net / RCS / getnetent.c,v < prev    next >
Text File  |  1988-07-25  |  3KB  |  154 lines

  1. head     1.2;
  2. access   ;
  3. symbols  ;
  4. locks    ; strict;
  5. comment  @ * @;
  6.  
  7.  
  8. 1.2
  9. date     88.07.25.11.00.52;  author ouster;  state Exp;
  10. branches ;
  11. next     1.1;
  12.  
  13. 1.1
  14. date     88.06.20.09.57.09;  author ouster;  state Exp;
  15. branches ;
  16. next     ;
  17.  
  18.  
  19. desc
  20. @@
  21.  
  22.  
  23. 1.2
  24. log
  25. @Lint.
  26. @
  27. text
  28. @/*
  29.  * Copyright (c) 1983 Regents of the University of California.
  30.  * All rights reserved.
  31.  *
  32.  * Redistribution and use in source and binary forms are permitted
  33.  * provided that this notice is preserved and that due credit is given
  34.  * to the University of California at Berkeley. The name of the University
  35.  * may not be used to endorse or promote products derived from this
  36.  * software without specific prior written permission. This software
  37.  * is provided ``as is'' without express or implied warranty.
  38.  */
  39.  
  40. #if defined(LIBC_SCCS) && !defined(lint)
  41. static char sccsid[] = "@@(#)getnetent.c    5.4 (Berkeley) 3/7/88";
  42. #endif /* LIBC_SCCS and not lint */
  43.  
  44. #include <stdio.h>
  45. #include <sys/types.h>
  46. #include <sys/socket.h>
  47. #include <netdb.h>
  48. #include <ctype.h>
  49.  
  50. #define    MAXALIASES    35
  51.  
  52. static char NETDB[] = "/etc/networks";
  53. static FILE *netf = NULL;
  54. static char line[BUFSIZ+1];
  55. static struct netent net;
  56. static char *net_aliases[MAXALIASES];
  57. int _net_stayopen;
  58. static char *any();
  59.  
  60. extern u_long inet_network();
  61.  
  62. setnetent(f)
  63.     int f;
  64. {
  65.     if (netf == NULL)
  66.         netf = fopen(NETDB, "r" );
  67.     else
  68.         rewind(netf);
  69.     _net_stayopen |= f;
  70. }
  71.  
  72. endnetent()
  73. {
  74.     if (netf) {
  75.         fclose(netf);
  76.         netf = NULL;
  77.     }
  78.     _net_stayopen = 0;
  79. }
  80.  
  81. struct netent *
  82. getnetent()
  83. {
  84.     char *p;
  85.     register char *cp, **q;
  86.  
  87.     if (netf == NULL && (netf = fopen(NETDB, "r" )) == NULL)
  88.         return (NULL);
  89. again:
  90.     p = fgets(line, BUFSIZ, netf);
  91.     if (p == NULL)
  92.         return (NULL);
  93.     if (*p == '#')
  94.         goto again;
  95.     cp = any(p, "#\n");
  96.     if (cp == NULL)
  97.         goto again;
  98.     *cp = '\0';
  99.     net.n_name = p;
  100.     cp = any(p, " \t");
  101.     if (cp == NULL)
  102.         goto again;
  103.     *cp++ = '\0';
  104.     while (*cp == ' ' || *cp == '\t')
  105.         cp++;
  106.     p = any(cp, " \t");
  107.     if (p != NULL)
  108.         *p++ = '\0';
  109.     net.n_net = inet_network(cp);
  110.     net.n_addrtype = AF_INET;
  111.     q = net.n_aliases = net_aliases;
  112.     if (p != NULL) 
  113.         cp = p;
  114.     while (cp && *cp) {
  115.         if (*cp == ' ' || *cp == '\t') {
  116.             cp++;
  117.             continue;
  118.         }
  119.         if (q < &net_aliases[MAXALIASES - 1])
  120.             *q++ = cp;
  121.         cp = any(cp, " \t");
  122.         if (cp != NULL)
  123.             *cp++ = '\0';
  124.     }
  125.     *q = NULL;
  126.     return (&net);
  127. }
  128.  
  129. static char *
  130. any(cp, match)
  131.     register char *cp;
  132.     char *match;
  133. {
  134.     register char *mp, c;
  135.  
  136.     while (c = *cp) {
  137.         for (mp = match; *mp; mp++)
  138.             if (*mp == c)
  139.                 return (cp);
  140.         cp++;
  141.     }
  142.     return ((char *)0);
  143. }
  144. @
  145.  
  146.  
  147. 1.1
  148. log
  149. @Initial revision
  150. @
  151. text
  152. @d33 2
  153. @
  154.